/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-4-1 下午5:57 Created by dwzhang
 */
package com.jade.bss.service.push;

import com.jade.framework.base.util.Parameters;

/**
 * Push 服务接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-4-1 下午5:57
 */
public interface PushService
{
    /**
     * 推送通知消息，被pushNotification代替。
     * @deprecated replaced by pushNotification
     */
    public PushResult sendPush(String appCode, String audienceType, String[] audiences, boolean isAnd,
                               String title, String notification, Parameters serviceParams, Parameters pushParams)
            throws PushException;

    /**
     * 推送通知消息，被pushNotification代替。
     * @deprecated replaced by pushNotification
     */
    public PushResult sendPush(String appCode, String platform, String audienceType, String[] audiences, boolean isAnd,
                               String title, String notification, Parameters serviceParams, Parameters pushParams)
            throws PushException;

    /**
     * 推送通知消息到设备。
     *
     * @param appCode 应用代码
     * @param audienceType 听众类型
     * @param audiences 听众
     * @param isAnd 多个听众的逻辑关系
     * @param title 标题，仅适用于Android系统
     * @param notification 通知内容
     * @param serviceParams 业务参数
     * @param pushParams 推送选项
     * @return 推送结果
     * @throws PushException　推送异常
     */
    public PushResult pushNotification(String appCode, String audienceType, String[] audiences, boolean isAnd,
                                       String title, String notification, Parameters serviceParams,
                                       Parameters pushParams)
            throws PushException;

    /**
     * 推送通知消息到设备。
     *
     * @param appCode 应用代码
     * @param platform 指定接收平台
     * @param audienceType 听众类型
     * @param audiences 听众
     * @param isAnd 多个听众的逻辑关系
     * @param title 标题，仅适用于Android系统
     * @param notification 通知内容
     * @param serviceParams 业务参数
     * @param pushParams 推送选项
     * @return 推送结果
     * @throws PushException　推送异常
     */
    public PushResult pushNotification(String appCode, String platform, String audienceType, String[] audiences,
                                       boolean isAnd, String title, String notification, Parameters serviceParams,
                                       Parameters pushParams)
            throws PushException;

    /**
     * 推送透传消息给应用。
     *
     * @param appCode 应用代码
     * @param audienceType 听众类型
     * @param audiences 听众
     * @param isAnd 多个听众的逻辑关系
     * @param title 标题，仅适用于Android系统
     * @param notification 通知内容
     * @param serviceParams 业务参数
     * @param pushParams 推送选项
     * @return 推送结果
     * @throws PushException　推送异常
     */
    public PushResult pushMessage(String appCode, String audienceType, String[] audiences, boolean isAnd,
                                  String title, String notification, Parameters serviceParams, Parameters pushParams)
            throws PushException;

    /**
     * 推送透传消息到应用。
     *
     * @param appCode 应用代码
     * @param platform 指定接收平台
     * @param audienceType 听众类型
     * @param audiences 听众
     * @param isAnd 多个听众的逻辑关系
     * @param title 标题，仅适用于Android系统
     * @param notification 通知内容
     * @param serviceParams 业务参数
     * @param pushParams 推送选项
     * @return 推送结果
     * @throws PushException　推送异常
     */
    public PushResult pushMessage(String appCode, String platform, String audienceType, String[] audiences,
                                  boolean isAnd, String title, String notification, Parameters serviceParams,
                                  Parameters pushParams)
            throws PushException;

    public ReceivedResult getReport(String appCode, long msgId)
            throws PushException;
}

